如何新建一个指定大小的bmp文件,并直接在bmp文件上添加内容

lexyohi 2004-06-22 12:08:16
两个问题。
1。如何新建一个高度=height,宽=width,背景色为color的bmp文件 (40分)

2。不通过picture等控件(SavePicture的方法),直接在文件上指定的区域添加内容,以下三种操作
1 指定的位置上写字 可指定字的大小,颜色 (20分)
2 划线,可指定线的粗细,颜色 (20分)
3 将其他图形文件画在指定的区域上 (20分)

请高手帮忙!
...全文
1615 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
再安装一边啊
lexyohi 2004-07-01
  • 打赏
  • 举报
回复
多谢各位帮助,开始散分
lexyohi 2004-06-28
  • 打赏
  • 举报
回复
to firechun(天火)
非常感谢!!!
文件下载了,但现在看不了,回家再看。
明天联系。

to CCL(VB卡尔) /thirdapple(陨落雕.:RNPA:.)

zyl910兄介绍的技术???
在哪,我找不到
thirdapple 2004-06-26
  • 打赏
  • 举报
回复
楼上忽略了,不需要zyl910介绍了方法,我再说一次:

/////////////////////////////////////
//全基于文件操作,不建立BITMAP和DC!/
/////////////////////////////////////
CCL 2004-06-26
  • 打赏
  • 举报
回复
文件映射+zyl910兄介绍的技术
firechun 2004-06-26
  • 打赏
  • 举报
回复
没办法,没人回贴,我贴不上去。

因为回复太长,贴了N次,后来又说我不能连续三次回贴,晕死,CSDN不能上传,没办法,我将源代码打包传到这里了:http://websx.home.zccn.net/bbs/dispbbs.asp?boardid=96&id=2863
CCL 2004-06-26
  • 打赏
  • 举报
回复
zyl910介绍的方法的确不建立BITMAP啊
lexyohi 2004-06-25
  • 打赏
  • 举报
回复
firechun(天火)
//实际上创建1米*1米的图片并不困难
可以帮我实现一下吗?我试过 ColdMooon(天行健,君子以自强不息) 的方法,
感觉耗时较多,图纸太大时创建不了。

其他绘图方法我可以慢慢解决,但目前这个问题我解决不了

//至于打印,我没有想好,是否也可以分片打印?一次性打印,没有能打1米宽的纸的打印机吧。
有0号图。我可能要打印几年的工程计划图,可能会有多大现在我都不知道。
抱歉问题有些极端
firechun 2004-06-25
  • 打赏
  • 举报
回复
//1米*1米约等于4*(800*600)pixels,即4到5张800*600图片
错了,应该是20张左右。
firechun 2004-06-25
  • 打赏
  • 举报
回复
中间的那些回复我没看,不知道你到底要做什么。

//1。很难生成像中国地图大小的BMP文件,我现在怀疑这是我的奢望。
//2。截图时好像只对较小的区域起作用

1.可以创建多个BMP图片,然后进行拚装
2.不明白你什么意思。将一幅大图拷贝到较小的区域,图片当然会按较小的区域进行截取。

实际上创建1米*1米的图片并不困难,在其上进行绘图也没有你想像中那么麻烦,在绘图时可以分片进行,只需要计算分界点即可。保存时不使用savepicture方法,而是直接将dib数据写入文件中,加上BMP文件头即可。

简单算一下就知道:1米*1米约等于4*(800*600)pixels,即4到5张800*600图片,在我的程序中,创建一张800*600的图片,所耗内存与时间都非常小,按BMP文件格式,1张800*600的图片大小不过1M左右,绘制1米*1米的图片,所耗时间与内存绝对在可以接受范围之内。


至于打印,我没有想好,是否也可以分片打印?一次性打印,没有能打1米宽的纸的打印机吧。
lexyohi 2004-06-25
  • 打赏
  • 举报
回复
没有高手发表意见了吗?
那我考虑今天结贴了。

能和众多高手讨论问题,受益匪浅。
lexyohi 2004-06-25
  • 打赏
  • 举报
回复
to firechun(天火) ( ) 信誉:102 2004-06-25 14:52:00
//未完,下面的贴接上
到底完没完啊?我等了3小时。。。。。。

下班了,下周再揭帖吧。

firechun 2004-06-25
  • 打赏
  • 举报
回复
Public Sub LoadRes(Res As tResource)
'把一幅图片加载到内存中
Dim tBmp As BITMAP

If Dir(Res.sPath) = "" Then
Exit Sub
End If

FreeRes Res

With Res
.hdc = CreateCompatibleDC(0)
Form1.picLoad.Picture = LoadPicture(.sPath)
.hBMP = CreateCompatibleBitmap(Form1.hdc, Form1.picLoad.ScaleWidth, Form1.picLoad.ScaleHeight)
.hOldBMP = SelectObject(.hdc, .hBMP)
BitBlt .hdc, 0, 0, Form1.picLoad.ScaleWidth, Form1.picLoad.ScaleHeight, Form1.picLoad.hdc, 0, 0, vbSrcCopy
MyGetObject .hBMP, Len(tBmp), tBmp
.Width = tBmp.bmWidth
.Height = tBmp.bmHeight
Set Form1.picLoad.Picture = Nothing
If .hBMP = 0 Then MsgBox "不能加载:" & Res.sPath
End With

End Sub

Public Function MakeMemBmp(ByVal Width As Long, ByVal Height As Long, Optional ByVal bkColor As Long = vbWhite) As tResource
'创建BMP图片
'Width,Height:宽高,pixels
'bkColor:背景色,默认为白色

Dim hBrush As Long
Dim hOldBr As Long
Dim rt As RECT
With MakeMemBmp
.hdc = CreateCompatibleDC(0)
.hBMP = CreateCompatibleBitmap(Form1.hdc, Width, Height)
.hOldBMP = SelectObject(.hdc, .hBMP)
.Width = Width
.Height = Height
If .hBMP = 0 Then
MsgBox "创建内存图象失败" '可能是内存不足,检查width和height的值
Exit Function
End If
hBrush = CreateSolidBrush(bkColor)
hOldBr = SelectObject(.hdc, hBrush)
rt.Left = 0
rt.Top = 0
rt.Right = Width
rt.Bottom = Height
FillRect .hdc, rt, hBrush
SelectObject .hdc, hOldBr
DeleteObject hBrush
DeleteObject hOldBr
End With
End Function

Public Sub FreeRes(ByRef Res As tResource)
SelectObject Res.hdc, Res.hOldBMP
DeleteObject Res.hBMP
DeleteObject Res.hOldBMP
DeleteDC Res.hdc
End Sub


Public Sub DrawString(ByVal hdc As Long, _
ByVal Text As String, _
ByVal Left As Long, _
ByVal Top As Long, _
ByVal Width As Long, _
ByVal Height As Long, _
ByVal Color As Long, _
ByVal Align As Long, _
Optional ByVal FontName As String = "宋体", Optional ByVal FontSize As Long = 12)
'在指定的设备是输出字符串
'hdc 设备hdc
'text 要写的字符串
'left,top,width,height 字符串对齐的矩形坐标
'color 字符颜色
'align 对齐方式,
'fontname 字体名称,默认为宋体
'fontsize 字体大小,默认为12
Dim rt As RECT
Dim lngLen As Long
Dim lf As LOGFONT
Dim hFont As Long
Dim hOldFont As Long

lf.lfHeight = FontSize
lf.lfCharSet = 1
lf.lfFaceName = FontName & vbNullChar
hFont = CreateFontIndirect(lf)
lngLen = LenB(StrConv(Text, vbFromUnicode))
rt.Left = Left
rt.Top = Top
rt.Bottom = rt.Top + Height
rt.Right = rt.Left + Width
hOldFont = SelectObject(hdc, hFont)
SetTextColor hdc, Color
SetBkMode hdc, TRANSPARENT '设为透明背景
DrawText hdc, Text, lngLen, rt, Align
SelectObject hdc, hOldFont
DeleteObject hFont
DeleteObject hOldFont
End Sub

Public Sub DrawLine(ByVal hdc As Long, _
ByVal X1 As Long, _
ByVal Y1 As Long, _
ByVal X2 As Long, _
ByVal Y2 As Long, _
Optional ByVal Width As Long = 1, _
Optional ByVal Style As Long = PS_SOLID, _
Optional ByVal lColor As Long = vbBlack)
Dim hPen As Long
Dim hOldPen As Long

hPen = CreatePen(Style, Width, lColor)
hOldPen = SelectObject(hdc, hPen)
MoveToEx hdc, X1, Y1, ByVal 0&
LineTo hdc, X2, Y2
SelectObject hdc, hOldPen
DeleteObject hPen
DeleteObject hOldPen
End Sub

Public Sub SavePic(ByRef Res As tResource, ByVal FileName As String)
'保存Res为BMP图片
Dim BMI As BITMAPINFO
Dim bytBits() As Byte
Dim lSize As Long
Dim BFH As BITMAPFILEHEADER
Dim hFile As Long
Dim dwBytes As Long

With BMI.bmiHeader
.biSize = Len(BMI.bmiHeader)
.biWidth = Res.Width
.biHeight = Res.Height
.biBitCount = 24
.biPlanes = 1
.biCompression = BI_RGB
.biSizeImage = ((Res.Width * 3 + 3) And &HFFFFFFFC) * Res.Height
End With

Call GetDIBData(Res, bytBits, BMI)

Call WriteBMP(BMI.bmiHeader, bytBits, FileName)
Erase bytBits
End Sub

Public Sub SaveFullPic(ByVal FileName As String)
Dim BIF As BITMAPINFOHEADER
Dim BMI As BITMAPINFO
Dim bytBits1() As Byte
Dim bytBits2() As Byte
Dim bytBits12() As Byte
Dim bytBits34() As Byte
Dim bytBits() As Byte
Dim lSize As Long
Dim hFile As Long
Dim dwBytes As Long

With BMI.bmiHeader
.biSize = Len(BMI.bmiHeader)
.biWidth = tBmp(1).Width
.biHeight = tBmp(1).Height
.biBitCount = 24
.biPlanes = 1
.biCompression = BI_RGB
.biSizeImage = ((tBmp(1).Width * 3 + 3) And &HFFFFFFFC) * tBmp(1).Height
End With

Call GetDIBData(tBmp(1), bytBits1, BMI)

With BMI.bmiHeader
.biSize = Len(BMI.bmiHeader)
.biWidth = tBmp(2).Width
.biHeight = tBmp(2).Height
.biBitCount = 24
.biPlanes = 1
.biCompression = BI_RGB
.biSizeImage = ((tBmp(2).Width * 3 + 3) And &HFFFFFFFC) * tBmp(2).Height
' lSize2 = .biSizeImage
End With
Call GetDIBData(tBmp(2), bytBits2, BMI)
Call UniteDibs(bytBits12, bytBits1, bytBits2, 1) '合并1,2

With BMI.bmiHeader
.biSize = Len(BMI.bmiHeader)
.biWidth = tBmp(3).Width
.biHeight = tBmp(3).Height
.biBitCount = 24
.biPlanes = 1
.biCompression = BI_RGB
.biSizeImage = ((tBmp(3).Width * 3 + 3) And &HFFFFFFFC) * tBmp(3).Height
End With

Call GetDIBData(tBmp(3), bytBits1, BMI)

With BMI.bmiHeader
.biSize = Len(BMI.bmiHeader)
.biWidth = tBmp(4).Width
.biHeight = tBmp(4).Height
.biBitCount = 24
.biPlanes = 1
.biCompression = BI_RGB
.biSizeImage = ((tBmp(4).Width * 3 + 3) And &HFFFFFFFC) * tBmp(4).Height
' lSize2 = .biSizeImage
End With
Call GetDIBData(tBmp(4), bytBits2, BMI)
Call UniteDibs(bytBits34, bytBits1, bytBits2, 1) '合并3,4

Call UniteDibs(bytBits, bytBits12, bytBits34, 2) '合并1,2,3,4

With BIF
.biSize = Len(BIF)
.biWidth = UBound(bytBits, 1) / 3
.biHeight = UBound(bytBits, 2) + 1
.biBitCount = 24
.biPlanes = 1
.biCompression = BI_RGB
.biSizeImage = ((.biWidth * 3 + 3) And &HFFFFFFFC) * .biHeight
End With

Call WriteBMP(BIF, bytBits, FileName)
End Sub


未完,下面的贴接上
firechun 2004-06-25
  • 打赏
  • 举报
回复
module1.bas:

Option Explicit

Private Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type

Public Type BITMAPFILEHEADER
bfType As Integer
bfSize1 As Integer 'bfSize as long,为对齐WORD,改为两个integer
bfSize2 As Integer
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits1 As Integer 'bfOffBits as long,为对齐WORD,改为两个integer
bfOffBits2 As Integer
End Type

Private Type BITMAPINFOHEADER '40 bytes
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBQUAD
End Type

Private Type SAFEARRAYBOUND
cElements As Long
lLbound As Long
End Type

Private Type SAFEARRAY2D
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
Bounds(0 To 1) As SAFEARRAYBOUND
End Type
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long


Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName As String * 32
End Type

Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Public Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Public Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Public Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Public Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Public Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long

Public Declare Function MyGetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Const TRANSPARENT = 1
Public Const DT_CENTER = &H1
Public Const DT_VCENTER = &H4
Public Const DT_LEFT = &H0
Public Const DT_SINGLELINE = &H20
Public Const DT_BOTTOM = &H8
Public Const DT_CENTERCENTER = DT_CENTER Or DT_VCENTER Or DT_SINGLELINE
Public Const PS_SOLID = 0
Public Const PS_DASH = 1
Public Const PS_DASHDOT = 3
Public Const PS_DASHDOTDOT = 4
Public Const PS_DOT = 2

Public Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal lMem As Long) As Long
Public Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long

Public Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, ByVal lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Public Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, ByVal lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Public Const DIB_PAL_COLORS = 1
Public Const DIB_RGB_COLORS = 0
Private Const BI_RGB = 0&

Type tResource
sPath As String
hBMP As Long
hOldBMP As Long
hdc As Long
Width As Long
Height As Long
End Type

Public Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const CREATE_ALWAYS = 2
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const INVALID_HANDLE_VALUE = -1
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Const FILE_BEGIN = 0

Public tBmp(1 To 4) As tResource

未完,下面的贴接上

firechun 2004-06-25
  • 打赏
  • 举报
回复
下面的代码我创建了4张400x300的图片,将一张640x480的现有图片分开拷贝到4张图上,并输出一行跨四个图片的文字,最后把4张图片合并成一张800x600的图片。大图片的保存直接使用dib数据,无需picturebox控件和savepicture方法。

需要说明一下,我的程序只是实现了图片的合并,我采用的例子也比较特殊(400x300不需要考虑每行是否能对齐DWORD),而且每个图片的大小一样,合并时可以省去很多麻烦,在你的实际应用中,需要考虑不同大小图片的合并(我想你的图纸不一定能分成大小一样的多个图片吧),如果图片的宽度不能被4整除,你还需要考虑合并时如何去掉原图片数据中的补齐字节以及在新图片加入字节使之能对齐DWORD,修改一下我的代码很容易做到,我没时间做这些了。
firechun 2004-06-24
  • 打赏
  • 举报
回复
BMP文件是最常用的windows图像文件,用VB创建BMP图片或直接修改BMP文件内容都很简单。

对24位BMP图片来说,因为每个象素点直接对应到文件中的RGBQUAD结构,修改是很容易的。

创建BMP图片并完成楼主指定的操作需要用到下面几个API:
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Public Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Public Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Public Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

等我吃完饭给你个例子吧
kmzs 2004-06-24
  • 打赏
  • 举报
回复
这个可能吗?我怀疑用VB做这种事是挑战极限。。。
lexyohi 2004-06-24
  • 打赏
  • 举报
回复
to pigpag(噼里啪啦 - 跟我念:矤鼡秊彑夨冭)
//我给你想个办法,分块打。不断把打印内容发送到打印机,但是不要保留整个图像,就是画一点打一点(当然要自上而下分成很多条)。

仅对于打印的话,我认为这方法是可行的。但是我已经做好了打印御览的程序。打印前可仔细浏览。
如果不是图片过大,一切都没问题。我还有点不太甘心

//不过打印方面我不熟悉,直接改BMP文件太不现实了(你要在BMP里面“写入”文字、线条,工作量多大………………………………………………)
我现在也有这种感觉,此路不通。
不知道有谁遇到过类似问题,是如何解决的。想多听一听高手的意见

我现在考虑,实在不行,在图片过大时,将其按时间段,分段画图,拼接在一起,在视觉上好像是一张图,进行御览。
打印时,有两种方法
1。将所有图片打印在指定区域上。但计算不精确的话,可能会有接茬部分处理不好
2。可用你的方法,与图无关,直接打印。


多谢指点!!!
欢迎其他建议
计划明后天结分。请踊跃发言
pigpag 2004-06-24
  • 打赏
  • 举报
回复
我给你想个办法,分块打。不断把打印内容发送到打印机,但是不要保留整个图像,就是画一点打一点(当然要自上而下分成很多条)。不过打印方面我不熟悉,直接改BMP文件太不现实了(你要在BMP里面“写入”文字、线条,工作量多大………………………………………………)
lexyohi 2004-06-24
  • 打赏
  • 举报
回复
to ColdMooon(天行健,君子以自强不息) :
感谢指点!

//楼主说的过大不明确,大到什么程度?
如果文件比硬盘还大,那我估计什么办法都白搭了.

我说的图片尺寸过大,是指超过一般打印机的打印尺寸A3,A4纸的型号,
要使用特殊的打印机打印的A1,A2纸,尺寸好像是590mm X 840mm左右。
文件比硬盘还大是不可能的,但可能会有100m-200m大小。
尺寸吗,可能是大号的中国地图大小,或更大。
要是能把它全画在picture上或image等控件上的话。我就不会问这个问题了。
因为不行,所以才要直接对文件操作

我的3个问题
1 指定的位置上写字 可指定字的大小,颜色 (20分)
2 划线,可指定线的粗细,颜色 (20分)
3 将其他图形文件画在指定的区域上 (20分)

字,图形文件的大小都是正常尺寸,不会太大,
线的粗细正常,但可能会较长,不过也就是BMP文件的长或宽的尺寸,毕竟是在上面画直线吗。

//楼主说的第1条写字,字有多大?
要是字的大小也超出CreateCompatibleDC的范围,那就不好办了.
如果字不大,可以先在别的图片框上写,这样就转化为问题3.
问题3,看刀!

我大致能明白你的意思。把一切字/线/图 都转化成图片框,再贴到BMP文件上,理论上可行。但这样的话会产生别的问题。
1。成千上万个元素就要产生成千上万张图,再贴到BMP文件上。时间和内存可能都会受到极大的考验。我估计会出问题
2。如分区域生成图片,再贴到BMP文件上的话。因为情况很复杂,实现很难。好些线是从始至终贯穿的。

不能直接在文件上画吗?

而且目前用你上次教的方法,BMP文件的尺寸也不能太大。有别的办法吗?

不过我已经收益匪浅了。 在此感谢!!!

希望再次指教
加载更多回复(43)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧