Option Explicit
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Sub UserForm_Click()
Dim x As Long
Dim y As Long
x = 10
y = 10
Dim picBuffer As Image
Set picBuffer = New Image
picBuffer.Picture = LoadPicture("C:\Temp\xlsimg.bmp", x, y)
For x = 1 To 10
For y = 1 To 10
Range("A1").Select
ActiveCell.Offset(x, y).Range("A1").Select
SetPixel GetDC(picBuffer.Picture.Handle), x, y, _
ActiveCell.Interior.Color
Range("A1").Select
Next
Next
SavePicture picBuffer.Picture, "C:\Temp\xlsimg.bmp"
End Sub
Sub UserForm_Click()
'Dim x As Long
'Dim y As Long
'x = 10
'y = 10
Dim picBuffer As Image
Set picBuffer = New Image
picBuffer.Picture = LoadPicture("D:\img.bmp", x, y)
'For x = 1 To 10
'For y = 1 To 10
' Range("A1").Select
' ActiveCell.Offset(x, y).Range("A1").Select
' SetPixel GetDC(picBuffer.Picture.Handle), x, y, ActiveCell.Interior.Color
'Next
'Next
SavePicture picBuffer.Picture, "D:\xlsimg.bmp"
End Sub
Денис писал(а):Следующий код НЕ работает. Но должен!
- Код: Выделить всё
Может быть из-за того, что
[code]
picBuffer.Picture = LoadPicture("C:\Temp\xlsimg.bmp", x, y)
SavePicture picBuffer.Picture, "C:\Temp\xlsimg.bmp"
[/code] ?
End Sub
Andrev писал(а):Денис писал(а):Следующий код НЕ работает. Но должен!
Может быть из-за того, что?
- Код: Выделить всё
picBuffer.Picture = LoadPicture("C:\Temp\xlsimg.bmp", x, y)
SavePicture picBuffer.Picture, "C:\Temp\xlsimg.bmp"
End Sub[/code]
Владимир7 писал(а):Работа в подобном графическом редакторе и даёт мысль о возможном использовании Excel для создания с нуля или редактировании имеющихся файлов изображений.
Владимир7 писал(а):сейчас то можешь подсказать направление решения именно Excel VBA
Владимир7 писал(а):Денис, не пойму в чём подсказка
Владимир7 писал(а):начинаем изучать форматы файлов изображений и порядок их создания
Option Explicit
Private Sub UserForm_Click()
Dim X As Integer
Dim Y As Integer
Dim b As Byte
Dim s As String
Dim s0 As String
Dim BMP_HEADER As String
X = 10
Y = 10
BMP_HEADER = "BM:" & _
String(7, Chr$(0)) & _
"6" & _
String(3, Chr$(0)) & _
"(" & _
String(3, Chr$(0)) & _
Chr$(X) & _
String(3, Chr$(0)) & _
Chr$(Y) & _
String(3, Chr$(0)) & _
Chr$(1) & Chr$(0) & Chr$(&H18) & _
String(5, Chr$(0)) & _
Chr$(4) & _
String(19, Chr$(0))
Open "C:\Temp\xlsimg.bmp" For Binary As #1
For X = 1 To Len(BMP_HEADER)
s = Mid$(BMP_HEADER, X, 1)
Put #1, , s
Next
For Y = 0 To 9
For X = 0 To 9
Range("A1").Select
ActiveCell.Offset(X, Y).Range("A1").Select
Put #1, , ActiveCell.Interior.Color
Range("A1").Select
Next
Next
Close #1
End Sub
Private Sub UserForm_Click()
Dim x As Integer, Y As Integer, b As Byte, s As String, s0 As String, BMP_HEADER As String, str0 As String, str As String
x = 10: Y = 10
BMP_HEADER = "BM:" & String(7, Chr$(0)) & "6" & String(3, Chr$(0)) & "(" & String(3, Chr$(0)) & Chr$(x) & String(3, Chr$(0)) & Chr$(Y) & String(3, Chr$(0)) & Chr$(1) & Chr$(0) & Chr$(&H18) & String(5, Chr$(0)) & Chr$(4) & String(19, Chr$(0))
Open "D:\Downloads\LR.bmp" For Binary As #1
For cX = 1 To Len(BMP_HEADER)
s = Mid$(BMP_HEADER, cX, 1)
Put #1, , s
Next
For bY = 0 To 9
For aX = 0 To 9
str0 = Right("000000" & Hex(Cells(aX + 1, bY + 1).Interior.Color), 6)
str = Right(str0, 2) & Mid(str0, 3, 2) & Left(str0, 2)
re = ConvertDec(Right(str0, 2)): gr = ConvertDec(Mid(str0, 3, 2)): bl = ConvertDec(Left(str0, 2))
cv = re & gr & bl 'cv = re & "." & gr & "." & bl 'cv = 254000000'cv = 254254254'cv = "&H254"
Put #1, , cv
Next
Next
Close #1
Me.Hide
End Sub
Function ConvertDec(heximal) As Long
Dim Simvol As String, DesChislo As Long, x As Long
ConvertDec = 0
For x = 1 To Len(heximal)
Simvol = Mid(heximal, x, 1)
If UCase(Simvol) = "A" Then
DesChislo = 10
ElseIf UCase(Simvol) = "B" Then
DesChislo = 11
ElseIf UCase(Simvol) = "C" Then
DesChislo = 12
ElseIf UCase(Simvol) = "D" Then
DesChislo = 13
ElseIf UCase(Simvol) = "E" Then
DesChislo = 14
ElseIf UCase(Simvol) = "F" Then
DesChislo = 15
Else
DesChislo = Val(Simvol)
End If
ConvertDec = ConvertDec + DesChislo * 16 ^ (Len(heximal) - x)
Next x
End Function
Viper писал(а):Работа со строками при записи/чтении изображения это мягко говоря неправильно. То есть совсем.
Владимир7 писал(а):Люди тоже как то делали:
http://www.vb-helper.com/howto_create_icon.html
http://www.andypope.info/vba/gex.htm
http://www.andypope.info/vba/buttoneditor.htm
Адресовано было несомненно Владимир7.Денис писал(а):Viper писал(а):Работа со строками при записи/чтении изображения это мягко говоря неправильно. То есть совсем.
Надеюсь, это не мне было адресовано? Потому что в моем примере я работал с байтами (несмотря на то, что заголовки я получил обратной разработкой из шестнадцатеричного дампа bmp-файла и объявил их как строку, я все равно работаю с ней (строкой) как с массивом байтов.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42